package com.tjetc;

import java.util.ArrayList;

class Person {
    String name;
    int age = 18;

    public Person() {
//        age = 18;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 传统版本
    public boolean compareTo (Person person1, Person person2) {
        if (person1.name.equals(person2.name) && person1.age == person2.age) {
            return true;
        }
        return false;
    }

    // this版本
    public boolean compareTo (Person person) {
        System.out.println(this.hashCode());
        if (this.name.equals(person.name) && this.age == person.age) {
            return true;
        }

        return false;
    }
}

public class _18HomeWork {

    public static void main(String[] args) {
        /*
            定义 Person 类，里面有name、age 属性，并提供 compareTo 比较方法，
            用于判断是否和另一个人相等， 名字和年龄完全一样，就返回 true,  否则返回 false

         */

        Person person1 = new Person("zhangsan", 1);
        Person person2 = new Person("zhangsan", 1);

        System.out.println(person1.compareTo(person1, person2));
        //
        System.out.println(person1.hashCode());
        System.out.println(person1.compareTo(person2));
    }


    public static void main3(String[] args) {
        /*
            在前面定义的 Person 类中添加两个构造器：
            第一个无参构造器： 利用构造器设置所有人的 age 属性初始值都为18
            第二个带 pName 和 pAge 两个参数的构造器：使得每次创建 Person 对象的同时初始化对象的 age 属性值和 name 属性值。
            分别使用不同的构造器，创建对象。

         */
    }

    public static void main2(String[] args) {
        /*
            有三个方法，分别实现
                返回姓名和两门课成绩(总分),
                返回姓名和三门课成绩(总分),
                返回姓名和五门课成绩(总分)。
            封装成一个可变参数的方法。
            定义类：Methods 方法名：showScore

         */
        Methods methods = new Methods();
        System.out.println(methods.showScore(34.4, 35.4, 54.9));
    }


    public static void main1(String[] args) {
        /*
            1.编写程序，类Methods中定义三个重载方法井调用。
            方法名为m。
            三个方法分别接收一个int参数、两个int参数、一个字符串参数。
            分别执行平方运算并输出结果，相乘并输出结果，输出字符串信息。在主类的main ()方法中分别用参数区别调用三个方法。
            在Methods类，定义三个重载方法max(),
            第一个方法，返回两个int值中的最大值，
            第二个方法，返回两个double值中的最大值，
            第三个方法，返回三个double值中的最大值，并分别调用三个方法。

         */
        Methods methods = new Methods();
        System.out.println(methods.m(1));
        System.out.println(methods.m(1, 2));
        System.out.println(methods.m("hello"));


        System.out.println(methods.max(4.0, 2.0, 3.0));
    }
}

class Methods {
    public int m(int num) {
        return num * num;
    }

    public int m(int num, int num1) {
        return num * num1;
    }

    public String m(String str) {
        return str;
    }

    public int max(int num, int num1) {
        return num > num1 ? num : num1;
    }

    public double max(double num, double num1) {
        return num > num1 ? num : num1;
    }


    public double max(double num, double num1, double num2) {
        // 先比较前两个数
        double max = num > num1 ? num : num1;
        // 再拿中间数 和第三个数比
        return max > num2 ? max : num2;
    }

    public double showScore (double... scores) {
        // 局部变量直接定义 不要只声明， 如果不确定值的时候 可以赋值成成员属性对应的默认值
        double sum = 0.0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }

        return sum;
    }
}
